package com.woniuxy.shirotest;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.env.BasicIniEnvironment;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;

/**
 * description: ShiroAuth <br>
 * date: 2021/12/4 6:11 下午 <br>
 * author: shesaifei <br>
 * version: 1.0 <br>
 */
//认证
public class ShiroAuth {
    public static void main(String[] args) {
        //1、加载配置文件 init 来构建shiro的环境
        BasicIniEnvironment basicIniEnvironment = new BasicIniEnvironment("classpath:shiro-auth.ini");
        //2、通过环境来创建SecurityManage
        SecurityManager securityManager = basicIniEnvironment.getSecurityManager();
        //3、将SecurityManage，放入一个shiro的工具类中
        SecurityUtils.setSecurityManager(securityManager);
        //4.直接操作工具类 创建subject主体 !!!核心代码 我们一定要要有操作主体
        Subject subject = SecurityUtils.getSubject();
        //上述代码就是 框架底层自己写好的代码，实际开发中，环境和securityManager
        //是框架帮我门实现 我们只需要第四步就好了
        //5、构造登录主体的凭证，提供用户和密码
        UsernamePasswordToken usernamePasswordToken =
                new UsernamePasswordToken("mayun", "123456");
        //6、通过主体的login方法，和我们封装好的对象，系统自动帮我们进行认证判断能否登录
        subject.login(usernamePasswordToken);

        //来判断这个subject主体，是否能够认真成功
        System.out.println("用户登录成功，认证状态是："+subject.isAuthenticated());
        //获取用户信息（获取的登录名）
        System.out.println("从主体中获取校长,用户登录成功，认证状态是："+subject.getPrincipal());
    }
}
